package com.micro.train.service;

import com.micro.train.entity.Train;
import com.micro.train.entity.Station;

import java.math.BigDecimal;
import java.time.LocalDate;

/**
 * 火车票价计算服务接口
 */
public interface PriceCalculationService {
    
    /**
     * 计算基础票价
     * @param train 列车信息
     * @param departureStation 始发站
     * @param terminalStation 终点站
     * @param seatType 座位类型
     * @return 基础票价
     */
    BigDecimal calculateBasePrice(Train train, Station departureStation, Station terminalStation, Integer seatType);
    
    /**
     * 计算动态票价（考虑日期、供需等因素）
     * @param basePrice 基础票价
     * @param travelDate 乘车日期
     * @param seatType 座位类型
     * @param availableSeats 可用座位数
     * @param totalSeats 总座位数
     * @return 动态票价
     */
    BigDecimal calculateDynamicPrice(BigDecimal basePrice, LocalDate travelDate, Integer seatType, 
                                    Integer availableSeats, Integer totalSeats);
    
    /**
     * 获取座位类型的价格系数
     * @param seatType 座位类型
     * @return 价格系数
     */
    BigDecimal getSeatTypePriceFactor(Integer seatType);
}
